package com.boarsoft.boar.batch.service;

import com.boarsoft.boar.batch.entity.BatchExecution;
import com.boarsoft.common.dao.PagedResult;

import java.util.List;

/**
 * 批量执行记录操作服务
 *
 * @author tao.wang57
 * @date 2023-12-27
 */
public interface BatchExecutionService {
    /**
     * @param id
     * @return
     */
    BatchExecution get(String id);

    /**
     * 返回最新的一条
     *
     * @param batchId
     * @return
     */
    BatchExecution getByBatchId(String batchId);

    /**
     * 返回所有
     *
     * @param batchId
     * @return
     */
    List<BatchExecution> getAllByBatchId(String batchId);

    /**
     * 获取当前节点的一级子节点
     *
     * @param id 当前节点
     * @return  当前节点的下一级节点
     */
    List<BatchExecution> getSonNods(String id);

    /**
     * @param ids
     * @return
     */
    List<BatchExecution> list(String[] ids);

    /**
     * 根据条件获取所有的执行记录
     *
     * @param infoId    批量定义ID
     * @param startTime
     * @param endTime
     * @param pageNo
     * @param pageSize
     * @return
     */
    PagedResult<BatchExecution> list(String infoId, String startTime, String endTime, int pageNo, int pageSize);

    /**
     * 根据条件获取所有的执行记录
     *
     * @param catalog   not null
     * @param key       code or name
     * @param startTime
     * @param endTime
     * @param pageNo
     * @param pageSize
     * @return
     */
    PagedResult<BatchExecution> list(String catalog, String key, String startTime, String endTime, int pageNo, int pageSize);

    /**
     * 添加新的执行记录，并返回id
     *
     * @param o
     * @return
     */
    String save(BatchExecution o);

    /**
     * 更新执行记录，并返回id
     *
     * @param o
     * @return
     */
    String update(BatchExecution o);

    /**
     * 获取指定批量的上一次执行记录
     *
     * @param defId
     * @return
     */
    BatchExecution last(String defId);

    /**
     * 查询指定状态的批量任务
     *
     * @param status
     * @return
     */
    List<BatchExecution> list(short status);

    /**
     * 查询所有活动任务
     *
     * @return
     */
    List<BatchExecution> list();

    /**
     * 根据id查询子项记录
     *
     * @param id
     * @return
     */
    List<BatchExecution> list(String id);

    /**
     * 查询顶级执行记录，即parentId为null的执行记录
     *
     * @param startTime
     * @param endTime
     * @return
     */
    List<BatchExecution> list(String startTime, String endTime);

    /**
     * 分页查询顶级执行记录，即parentId为null的执行记录
     *
     * @param startTime
     * @param endTime
     * @return
     */
    PagedResult<BatchExecution> list(String startTime, String endTime, int pageNo, int pageSize);

    /**
     * 分页查询所有状态为'新任务'，'排队中'，'执行中'或'取消中'(非终态)的执行记录
     *
     * @param
     * @return
     */
    PagedResult<Object[]> listExecuting(int pageNo, int pageSize);

    /**
     * 删除某条执行记录，用于重跑？
     *
     * @param id
     */
    void delete(String id);

    /**
     * 更新执行状态为成功
     *
     * @param id
     */
    public int updateStatusSuccess(String id);

    /**
     * 更新执行状态为失败
     *
     * @param id
     */
    public int updateStatusFailed(String id);
}
